package model;

import java.util.Date;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

import beans.MiembroView;
import beans.UsuarioView;

@Entity
@Table(name="Usuario")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="tipo",discriminatorType=DiscriminatorType.STRING)

public abstract class Usuario {

	@Id
	@Column(name = "Legajo")
	//@GeneratedValue(strategy = GenerationType.AUTO)
	private Long legajo;
	
	@Column(name="Nombre")
	private String nombre;
	
	@Column(name="Apellido")
	private String apellido;
	
	@Column(name="Nick")
	private String nick;
	
	@Column(name="Clave")
	private String clave;
	
	@Column(name="Email")
	private String email;

	@Column(name="Fecha_Nacimiento")
	private Date fechaNacimiento;
	
	@Column(name="Fecha_Creacion")
	private Date fechaCreacion;
	
	@Column(name="Activo")
	private Boolean activo;
	
	public Usuario() {
	}
	
	public Usuario(Long legajo, String nombre, String apellido, String nick,
			String clave, String email, Date fechaNacimiento, Boolean activo) {
		super();
		this.legajo = legajo;
		this.nombre = nombre;
		this.apellido = apellido;
		this.nick = nick;
		this.clave = clave;
		this.email = email;
		this.fechaNacimiento = fechaNacimiento;
		this.activo = activo;
	}
	
	

	public Long getLegajo() {
		return legajo;
	}
	public void setLegajo(Long legajo) {
		this.legajo = legajo;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getApellido() {
		return apellido;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	public String getNick() {
		return nick;
	}
	public void setNick(String nick) {
		this.nick = nick;
	}
	public String getClave() {
		return clave;
	}
	public void setClave(String clave) {
		this.clave = clave;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}
	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
	public Boolean getActivo() {
		return activo;
	}
	public void setActivo(Boolean activo) {
		this.activo = activo;
	}
	
	public UsuarioView getView() {
		
		return new MiembroView(getLegajo(),getNombre(),getApellido(),
				getNick(),getClave(),getEmail(),
				getFechaNacimiento(),getFechaNacimiento(),getActivo());
	}
	public abstract void persistir();
	

	
}

